package org.xforth.config.aop; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; import org.aspectj.lang.reflect.MethodSignature; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.xforth.config.client.ConfigBundle; @Aspect public class DynamicPropertyAspect { private static final Logger logger = LoggerFactory.getLogger(DynamicPropertyAspect.class); private ConfigBundle configBundle; @Around("execution(public * get*()) && @annotation(org.xforth.config.aop.DynamicValue)") public Object dynamicValueSet(ProceedingJoinPoint pjp) throws Throwable { final MethodSignature signature = (MethodSignature) pjp.getSignature(); DynamicValue valueAno = signature.getMethod().getAnnotation(DynamicValue.class); if(valueAno!=null){ String propKey = valueAno.value(); if(logger.isDebugEnabled()){ logger.debug("xforth dynamicValueSet propKey key:"+propKey+" value:"+configBundle.get(propKey)); } try { return configBundle.get(propKey); }catch (Throwable e){ logger.error("Method name:{} dynamicValueSet error:{}",signature.getMethod().getName(),e); } } Object result = pjp.proceed(); return result; } public ConfigBundle getConfigBundle() { return configBundle; } public void setConfigBundle(ConfigBundle configBundle) { this.configBundle = configBundle; } }